<?php
if(!defined("__OME"))die("<tt>TembeMoods Engine</tt>");
#--------------#
# KERNEL 1.0 - : No edite este archivo a menos que realmente sepa lo que hace
#--------------#

/*** Constantes del sistema ***/
define('DS',DIRECTORY_SEPARATOR);		# Para unix / y para windows \
define('DR',__DIR__.DS); 				# Tomando en cuenta que DR sera donde se ejecute el kernel
define('AHORA',date('Y-m-d h:i:s A'));

define('DEBUG',true); # establece si es o no el modo depurador

/*** Muestra de la clase principal ***/
abstract class Kernel {
	static		$A_CONF="tm-config.php"; # Nombre del archivo de configración
	static 		$CONF;	# Configuración primaria
	var			$DEP;	# Objeto de las dependencias
	/*MYSQL*/
	#Integrando el mysql al kernel, evitar una absoluta dependencia al gestor MYSQL
	var			$BD; # Objeto del /*MYSQL*/
	
	abstract static function leer_conf();	#Lee el archivo de configuración.
	abstract function cargar();
	#abstract function guardar_conf();		#Guarda la configuración en el archivo.
}


/* Clase principal */
class TembeMoods extends Kernel{

	function __construct($filE){
		error_reporting((DEBUG==false)?0:-1); # nivel de reporte
		self::leer_conf(); #Ejecuta el metodo leer configuración
		$this->DEP = new Dependencias(self::$CONF['dep_arch']); # Carga el objeto de las dependencias
		
		#Dependencias necesarias del sistema
		$this->DEP->llamar("Archivos");
	}

	function __destruct(){/* #~ DEBUG */ if(DEBUG) echo "<hr>Kernel ".memory_get_usage(0);}
	
	static function leer_conf(){ include(DR.static::$A_CONF); } # carga el archivo de configuración primaria

	function guardar_conf(){
		$archconf = new Archivos(self::$A_CONF);
		echo $archconf->leer();
		
	}
	
	function cargar(){ // Mejorar la carga de dependencias
		# este metodo carga las dependencia e instancia un menejador MYSQL
		
		$deP="include('".DR."clases".DS."mysql.class".((DEBUG==false)?'':'.deb').".php');";
		# aprovechamos la variable deP para insertar el llamado 
		
		if(is_array($this->DEP->DEPL))
		foreach( $this->DEP->DEPL as $v) $deP.="include('".DR."dependencias".DS."$v');";
		else
		die('No hay dependencias que cargar');
		
		unset($this->DEP); # Matamos primero al hijo de puta
		
		return $deP;
	}
}

///////////////////////////
# Dependencias del sistema
class Dependencias {
	
	static 	$DEPE;	# Dependencias totales
	var		$DEPL;	# Dependencias cargadas
	
	function __construct($arch){include(DR.$arch);} #  carga el archivo de las dependencias
	
	function __destruct(){
		//#~ DEBUG
		if(DEBUG) echo "<hr>Dependencias ".memory_get_usage();
	}
	
	function llamar($deP=null){
		if(!empty(static::$DEPE[$deP])){
			$this->DEPL[$deP]=static::$DEPE[$deP];
		}else{
			die("La dependencia <b>'$deP'</b> no existe"); #deBUG
		}
	}
}

#-------------------------------------------#
//$MyMoods = new OpenMoods(__FILE__,-1);
//print_r($MyMoods::$CONF);
//print_r($MyMoods->leer_conf());
//echo $MyMoods::$CONF;
//OpenMoods::leer_conf();
//echo OpenMoods::$CONF['Dos'];


/* Funciones globales */
function glog($err=null) # Logs internos del codigo primitivo
{
	$arch=date('d').".php"; #* Variables que solo se configuran manualmente 
	$dir="logs"; #* Variables que solo se configuran manualmente
	$mes_dir=date('Y-m');
	
	$rdir=DR.DS.$dir.DS;
	$rarch=$rdir.$mes_dir.DS.$arch;
	
	if(!is_dir($rdir)){
		mkdir($rdir);
		file_put_contents($rdir.'index.html',"<tt>OpenMoods Engine</tt>");
	}
	if(!is_writable($rdir)){
		die('Error # 4031');
	}else{
		if(!is_dir($rdir.$mes_dir)){
			mkdir($rdir.$mes_dir);
			file_put_contents($rdir.$mes_dir.DS.'index.html',"<tt>OpenMoods Engine</tt>");
		}
		if (!is_file($rarch)) file_put_contents($rarch, "<?php \n");
			file_put_contents($rarch, '#---> '.((empty($err))?serialize(error_get_last()):$err)."\n\n\n", FILE_APPEND);
	}
}
?>